package com.heima.user.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.heima.article.dtos.ApArticleInfoDto;
import com.heima.user.dtos.UserDto;
import com.heima.user.dtos.UserFollowDto;
import com.heima.model.common.dtos.PageRequestDto;
import com.heima.model.common.dtos.PageResponseResult;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.user.dtos.LoginDto;
import com.heima.user.dtos.LoginResDto;
import com.heima.user.pojos.ApUser;
import com.heima.user.pojos.ApUserFollow;
import com.heima.user.service.ApUserService;
import com.heima.wemedia.dtos.WmAuthDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/v1")
public class ApUserController {

    @Autowired
    private ApUserService userService;

    /**
     * app端 用户登录
     *
     * @param loginDto 前端dto
     * @return 返回结果
     */
    @PostMapping("/login/login_auth")
    public ResponseResult loginAuth(@RequestBody LoginDto loginDto) {
        LoginResDto loginAuth = userService.loginAuth(loginDto);
        return ResponseResult.okResult(loginAuth);
    }

    /**
     * 用户审核 分页查询
     *
     * @param pageRequestDto 前端dto 分页查询参数 页码 每页显示条数 条件
     * @return 返回结果
     */
    @PostMapping("/auth/list")
    public PageResponseResult authList(@RequestBody PageRequestDto pageRequestDto) {
        Page page = userService.authPage(pageRequestDto);
        return PageResponseResult.getPageResponseResult(page);
    }

    /**
     * 用户审核通过
     *
     * @param wmAuthDto 前端dto
     * @return 返回结果
     */
    @PostMapping("/auth/authPass")
    public ResponseResult authPass(@RequestBody WmAuthDto wmAuthDto) {
        userService.authPass(wmAuthDto);
        return ResponseResult.okResult(null);
    }

    /**
     * 用户审核驳回
     *
     * @param wmAuthDto 前端dto
     * @return 返回结果
     */
    @PostMapping("/auth/authFail")
    public ResponseResult authFail(@RequestBody WmAuthDto wmAuthDto) {
        userService.authFail(wmAuthDto);
        return ResponseResult.okResult(null);
    }

    /**
     * 用户关注与取消
     *
     * @param userFollowDto 前端dto
     * @return 返回结果
     */
    @PostMapping("/user/user_follow")
    public ResponseResult userFollow(@RequestBody UserFollowDto userFollowDto) {
        userService.userFollow(userFollowDto);
        return ResponseResult.okResult(null);
    }

    /**
     * <H2>查询当前用户下关注列表是否有此用户</H2><br>
     * 根据关注者id和被关注者id,查询当前用户是否关注了此用户
     *
     * @param apArticleInfoDto 文章信息dto-关注者id和被关注者id
     * @return 返回关注记录信息
     */
    @PostMapping("/user/get_user_follow")
    public ResponseResult<ApUserFollow> getUserFollow(@RequestBody ApArticleInfoDto apArticleInfoDto) {
        int userId = apArticleInfoDto.getUserId().intValue();
        ApUserFollow apUserFollow = userService.getUserFollow(userId, apArticleInfoDto.getAuthorId());
        return ResponseResult.okResult(apUserFollow);
    }

    /**
     * 查询app端用户
     * @param userDto 前端dto查询条件
     * @return 用户
     */
    @PostMapping("/user/getUser")
    public ResponseResult<ApUser> getUser(@RequestBody UserDto userDto){
        ApUser apUser = userService.getUser(userDto);
        return ResponseResult.okResult(apUser);
    }
}
